這個系列會帶著您通過Node.js中的Discord.js套件,從0到1開始製作屬於自己的Discord機器人,希望可以幫助大家成為機器人的開發者哦!
這篇教學將會帶著大家為機器人新增一個指令:
這篇文章的工作會編寫到 index.js
以及 deploy.js
分別用於執行機器人以及註冊指令。
......前段省略
const commands = [
{
name: 'ping',
description: 'Replies with Pong!',
},
];
後段省略......
首先,要製作 deploy.js
-註冊斜線指令,由於我們所使用的官方範例已經有註冊一個指令叫做「ping」,因此我們只要修改他的敘述即可,將 description: 'Replies with Pong!'
的引號中改為您想為這個指令設置的資訊,例如:
......前段省略
const commands = [
{
name: 'ping',
description: '得知機器人的延遲資訊',
},
];
後段省略......
編寫完後存檔,並在控制台輸入以下指令執行程式碼:
node deploy.js
等待運作完成且控制台顯示如下後,即完成註冊指令!
此時到Discord輸入斜線 (/) 會發現機器人的 ping
指令的敘述已經成功修改(倘諾未出現可能是延遲問題,稍待片刻即可)
接下來,就可以開始編寫程式囉!要編寫的是機器人主程式 index.js
的 onInteractionCreate 事件
......前段省略
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
await interaction.reply('Pong!');
}
});
後段省略......
這裡也已經有了偵測ping使用的事件,因此我們直接對裡面的內容進行修改即可!
機器人的延遲分為「機器人延遲」以及「API延遲」,機器人延遲為機器人對於指令處理的延遲,而api延遲是官方Discord API的延遲數值,皆以毫秒(ms)顯示
Note: 1000毫秒 = 1秒
首先,我們先讓機器人回應機器人延遲,獲得方式如下(解釋皆以註解方式寫在程式碼中,//
後的文字可以刪除或修改):
//對使用者進行回應,告訴使用者我們正在測量延遲,同時讓此訊息用於計算機器人回應的延遲時間
const msg = await interaction.reply({
content: "正在計算延遲......", //設定訊息的內容
fetchReply: true //告訴API我們將會對這個指令做出進一步的回應
});
//將ping變數設定為「成功回應的時間」與「指令發送的時間」之間隔
const ping = msg.createdTimestamp - interaction.createdTimestamp;
將其套用到我們的程式碼即為如此:
......前段省略
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
const msg = await interaction.reply({
content: "正在計算延遲......",
fetchReply: true
});
const ping = msg.createdTimestamp - interaction.createdTimestamp;
interaction.editReply(`機器人延遲:${ping} ms`)
//editReply是指修改回覆,使用此函數是因為我們先前已經發送過指令,若用reply會發生錯誤
}
});
後段省略......
Note: 兩個`中包住的字串,可以放入${},大括號中包入變數或函數,顯示出的即為該值
將此段程式碼存檔後運行
node index.js
等待準備好開始運行後,至Discord輸入指令,即可獲得機器人的延遲!
接著,要得知的是API延遲,方式如下:
client.ws.ping
比剛剛的機器人延遲簡單了許多,直接將其套入到程式碼中:
......前段省略
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
// 機器人延遲獲取
const msg = await interaction.reply({
content: "正在計算延遲......",
fetchReply: true
});
const ping = msg.createdTimestamp - interaction.createdTimestamp;
// 告知用戶延遲
interaction.editReply(`機器人延遲:${ping} ms\nAPI延遲:${client.ws.ping} ms`)
// \n 是指換行
}
});
後段省略......
存檔後重新啟動就完成囉!
再次使用指令(兩指令的時間隔了四分鐘,是筆者因為方便截圖,實際運行不會唷!):
......前段省略
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
const msg = await interaction.reply({
content: "正在計算延遲......",
fetchReply: true
});
const ping = msg.createdTimestamp - interaction.createdTimestamp;
interaction.editReply(`機器人延遲:${ping} ms\nAPI延遲:${client.ws.ping} ms`)
}
});
後段省略......
這篇文章帶著大家製作了我們的第一個手作指令:ping,希望這篇教學可以幫助到您!下篇文章再見囉,掰掰~